// 引入axios
import axios from 'axios';
import { REQUEST_TIMEOUT, BASE_URL } from '../../config/public';
// 引入message
import { CDMessage } from './message';
// 引入token
import { GET_TOKEN } from './token';
// 引入qs
import qs from 'qs';

// 创建axios实例
const service = axios.create({
    baseURL: BASE_URL, // api的base_url
    timeout: REQUEST_TIMEOUT // 请求超时时间
})
// 错误http错误码处理函数
const errorRsponse = (error) => {
    // 错误的http状态码处理
    switch (error.response.status) {
        case 401:
            CDMessage.error('登录过期，请重新登录');
            break;
        case 403:
            CDMessage.error('拒绝访问');
            break;
        case 404:
            CDMessage.error('请求错误,未找到该资源');
            break;
        case 500:
            CDMessage.error('服务端错误');
            break;
        case 502:
            CDMessage.error('正在进行系统打包，请稍等');
            break;
        case 503:
            CDMessage.error('服务端错误');
            break;
        default:
            break;
    }
    // 错误处理
    return Promise.reject(error)
}
// 接口错误信息处理函数
const errorUsponse = (response) => {
    // 错误的http状态码处理
    switch (response.status) {
        case 1:
            CDMessage.error(response.msg);
            break;
        case 0:
            CDMessage.error(response.msg);
            break;
        case -1:
            CDMessage.error(response.msg);
            break;
        default:
            break;
    }
    // 错误处理
    return Promise.reject(response)
}
// request拦截器
service.interceptors.request.use((config) => {
    if (GET_TOKEN()) {
        config.headers['Authorization'] = GET_TOKEN();
    }
    //如果config是formdata格式，需要设置请求头
    if (config.method == "formdata") {
        config.method = 'post';
        config.data = qs.stringify(config.data);
		config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
    }
    // 把config 返回出去
    return config;
}, (error) => {
    // 错误处理
    return Promise.reject(error);
})

//request 响应器
service.interceptors.response.use((response) => {
    response = response.data;
    if(response.code==200){
        return response.data;
    }else{
        CDMessage.error(response.msg);
        return errorUsponse(response);
    }
	// if(response.success){
	// 	if(response.data){
    //         return response.data
	// 	}else{
	// 		return response;
	// 	}

	// }else{
	// 	if( response.status == 1 || response.status == 0 ){
	// 		const resMap = new Map(Object.entries(response.data))
	// 		if( resMap.size > 1 ){
	// 			return {
	// 				...response.data,
	// 				msg:response.msg
	// 			}
	// 		}
	// 		if( !response.data[resMap.keys().next().value] ){
	// 			return response
	// 		}
	// 		return response.data[resMap.keys().next().value]
	// 	}
	// 	if( response.status == -1){
	// 		CDMessage.error(response.msg)
	// 		// return res.data;
	// 	}
	// 	return errorUsponse(response.data);
    // }
},errorRsponse)


export default service;